From de3c48d72ec7064e7f0522877fe759c729df0c50 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Wed, 25 Mar 2020 11:32:18 -0400
Subject: [PATCH] Allow using a system provided libgit2 library

Setting the USE_SYSTEM_LIBGIT2 Make or CMake variable (through the
BUILD_OPTIONS variable) to any value enables using the system library.
The default behavior of using a bundled copy of libgit2 is unchanged.
---
 CMakeLists.txt     |  9 +++++++--
 Makefile           | 11 +++++++++++
 src/CMakeLists.txt |  9 +++++++--
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a393d7c..75d6ca6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,9 +7,14 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "shared" FORCE)
 set(BUILD_CLAR OFF CACHE BOOL "clar" FORCE)
 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DEGIT_DEBUG")
 
-add_subdirectory(libgit2)
+if(USE_SYSTEM_LIBGIT2)
+  find_package(PkgConfig REQUIRED)
+  pkg_check_modules(git2 REQUIRED IMPORTED_TARGET libgit2)
+else()
+  add_subdirectory(libgit2)
+  find_library(git2 libgit2.a)
+endif()
 
-find_library(git2 libgit2.a)
 add_subdirectory(src)
 
 enable_testing()
diff --git a/Makefile b/Makefile
index 8199532..6a6a4e1 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,13 @@ ifeq ($(UNAME),MSYS)
 	BUILD_OPTIONS+= -G "MSYS Makefiles"
 endif
 
+# If the variable USE_SYSTEM_LIBGIT2 is set to *any* value, use the
+# system provided libgit2 library.
+USE_SYSTEM_LIBGIT2? := \
+	$(if $(or $(USE_SYSTEM_LIBGIT2),\
+	 	  $(findstring USE_SYSTEM_LIBGIT2,$(BUILD_OPTIONS))),\
+		true)
+
 ifeq "$(TRAVIS)" "true"
 ## Makefile for Travis ###################################################
 #
@@ -87,7 +94,11 @@ submodule-update:
 	@git submodule update
 
 libgit2:
+ifeq ($(USE_SYSTEM_LIBGIT2?),)
 	@git submodule update --init
+else
+	@echo "Using the system provided libgit2 library"
+endif
 
 CLEAN  = $(ELCS) $(PKG)-autoloads.el build
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cfb5777..0dbad8a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,8 +13,13 @@ if(WIN32)
   set_target_properties(egit2 PROPERTIES PREFIX lib)
 endif(WIN32)
 
-target_link_libraries(egit2 git2)
-target_include_directories(egit2 SYSTEM PRIVATE "${libgit2_SOURCE_DIR}/include")
+if(USE_SYSTEM_LIBGIT2)
+  target_link_libraries(egit2 PRIVATE PkgConfig::git2)
+else()
+  target_link_libraries(egit2 git2)
+  target_include_directories(
+    egit2 SYSTEM PRIVATE "${libgit2_SOURCE_DIR}/include")
+endif()
 
 if(CMAKE_COMPILER_IS_GNUCC)
   target_compile_options(egit2 PRIVATE -Wall -Wextra)
-- 
2.26.2

